package araujoCoronelVillamayor.plantasVsZombies.domain;

import araujoCoronelVillamayor.plantasVsZombies.domain.JardinZen;
import araujoCoronelVillamayor.plantasVsZombies.domain.Planta;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.xtext.xbase.lib.IterableExtensions;
import org.uqbar.commons.model.UserException;
import org.uqbar.commons.utils.Observable;

@Observable
@SuppressWarnings("all")
public class Fila implements Serializable {
  private ArrayList<Planta> casillerosPlanta;
  
  private static int cantidadMaximaPlantas = 3;
  
  private String _tipo;
  
  public String getTipo() {
    return this._tipo;
  }
  
  public void setTipo(final String tipo) {
    this._tipo = tipo;
  }
  
  private int _cantidadPlantas;
  
  public void setCantidadPlantas(final int cantidadPlantas) {
    this._cantidadPlantas = cantidadPlantas;
  }
  
  private JardinZen jardinZen;
  
  private int lugaresLibres;
  
  public Fila(final String tipoFilaParametro, final JardinZen jardinZenParametro) {
    this.setTipo(tipoFilaParametro);
    ArrayList<Planta> _arrayList = new ArrayList<Planta>();
    this.casillerosPlanta = _arrayList;
    this.jardinZen = jardinZenParametro;
  }
  
  public boolean plantar(final Planta unaPlanta) {
    boolean _xifexpression = false;
    boolean _hayEspacio = this.hayEspacio();
    if (_hayEspacio) {
      boolean _add = this.casillerosPlanta.add(unaPlanta);
      _xifexpression = _add;
    } else {
      UserException _userException = new UserException("No hay espacio en la fila para agregar m\u00E1s plantas");
      throw _userException;
    }
    return _xifexpression;
  }
  
  public boolean hayEspacio() {
    int _size = this.casillerosPlanta.size();
    boolean _lessThan = (_size < Fila.cantidadMaximaPlantas);
    return _lessThan;
  }
  
  public int getCantidadPlantas() {
    int _size = this.casillerosPlanta.size();
    return _size;
  }
  
  public Planta ultimaPlanta() {
    Planta _last = IterableExtensions.<Planta>last(this.casillerosPlanta);
    return _last;
  }
  
  public boolean hayPlantas() {
    boolean _isEmpty = this.casillerosPlanta.isEmpty();
    boolean _not = (!_isEmpty);
    return _not;
  }
  
  public boolean estoyVacia() {
    int _cantidadPlantas = this.getCantidadPlantas();
    boolean _equals = (_cantidadPlantas == 0);
    return _equals;
  }
  
  public int getCantidadMaximaPlantas() {
    int _cantidadMaximaPlantas = this.getCantidadMaximaPlantas();
    return _cantidadMaximaPlantas;
  }
  
  public boolean quitarPlanta(final Planta unaPlanta) {
    boolean _remove = this.casillerosPlanta.remove(unaPlanta);
    return _remove;
  }
  
  public ArrayList<Planta> casillerosPlanta() {
    return this.casillerosPlanta;
  }
  
  public void limpiar() {
    this.casillerosPlanta.clear();
  }
  
  public List<Planta> plantasDelMismoTipo() {
    String _tipo = this.getTipo();
    List<Planta> _search = this.jardinZen.search(_tipo);
    return _search;
  }
  
  public int getLugaresLibres() {
    int _cantidadPlantas = this.getCantidadPlantas();
    int _minus = (Fila.cantidadMaximaPlantas - _cantidadPlantas);
    return _minus;
  }
}
